
/********************************************************************************
 * 文件名称：platform_cfg.h
 * 功能描述：MCU平台配置信息的头文件。
 *			1，包含被选择的MCU的宏、内核的头文件、MCU的头文件；
 *			2，包含SDK中使用的常量；
 *			3，包含C代码中经常使用的汇编指令、内建函数、内联函数的宏；
 *
 * 注意事项：1，
 *
 * 文件制作：智芯半导体，张允杰
 * 修改日期：2023.03.15
 * 修改记录：1，
 *			2，
 *
 * Copyright (C) 2021-2023 Zhixin Semiconductor Ltd. All rights reserved.
 *******************************************************************************/

#ifndef _PLATFORM_CFG_H_
#define _PLATFORM_CFG_H_


/* ***** 包含内核和被选择MCU的头文件 *********************************************** */

#define DEV_Z20K148M			//定义被选择的MCU的型号


#include "core_cm4.h"			//包含 Cortex-M4 内核的配置数据和内核函数

#if (defined(DEV_Z20K148M))
    #include "Z20K148M.h"		//包含MCU的头文件
#elif (defined(DEV_Z20K146M))
    #include "Z20K146M.h"		//包含MCU的头文件
#elif (defined(DEV_Z20K144M))
    #include "Z20K144M.h"		//包含MCU的头文件
#else
    #error "No valid device defined!"
#endif


/* ***** 定义SDK中使用的常量 ******************************************************* */

#define FLASH_CMD_FUNC_IN_RAM		1	// Flash cmd functions are RAM functions
#define DRV_DELAY_FUNC_IN_RAM		1	// DRV_Delay function is RAM function

#define ADC_TIMEOUT_WAIT_CNT_SWRST			10U			// ADC software reset timeout value
#define ADC_TIMEOUT_WAIT_CNT_CALIBRATION	10000U		// ADC calibration reset timeout value

#define CAN_TIMEOUT_WAIT_CNT_1				5000000U	// CAN timeout value1
#define CAN_TIMEOUT_WAIT_CNT_2				10000U		// CAN timeout value2
#define CAN_TIMEOUT_WAIT_CNT_3				1000000U	// CAN timeout value3

#define CLK_WAITCONFIG_CNT					3500U		// Clock config counter value
#define CLK_TIMEOUT_WAIT_CNT				100000U		// Clock timeout value
#define CLK_TIMEOUT_WAIT_CNT_OSC32K			5000000U	// OSC32K timeout value

#define FLASH_TIMEOUT_WAIT_CNT				300000U		// Flash timeout value
#define FLASH_TIMEOUT_WAIT_CNT_ERASE_ALL	30000000U	// Flash erase timeout value
#define FLASH_TIMEOUT_ABORT_WAIT_CNT		300U		// Flash abort timeout value

#define HWDIV_TIMEOUT_WAIT_CNT				10000U		// HWDIV timeout value

#define WDOG_WAITCONFIG_GOING_CNT			0xFFFFFU	// WDOG config timeout value


/* ***** 定义常用功能的汇编指令的宏 ************************************************ */

//空指令
#define CORE_nop()          __asm ("nop")

//等待中断
#define CORE_wfi()          __asm("wfi")

//等待事件
#define CORE_wfe()          __asm("wfe")

//指令同步屏障指令
#define CORE_isb()          __asm("isb")

//数据同步屏障指令
#define CORE_dsb()          __asm("dsb")

//数据内存屏障指令
#define CORE_dmp()          __asm("dmb")

//使能/禁止 IRQ 指令
#define CORE_Enable_IRQ()   __asm("cpsie i")
#define CORE_Disable_IRQ()  __asm("cpsid i")

//使能/禁止故障的 IRQ 指令
#define CORE_Enable_FIQ()   __asm("cpsie f")
#define CORE_Disable_FIQ()  __asm("cpsid f")


/* ***** 定义常用功能的内建函数、内联函数的宏 *************************************** */

//No Operation
#define CORE_NOP       __NOP

//Wait For Interrupt
#define CORE_WFI       __WFI

//Wait For Event
#define CORE_WFE       __WFE

//Send Event
#define CORE_SEV       __SEV

//Instruction Synchronization Barrier
#define CORE_ISB       __ISB

//Data Synchronization Barrier
#define CORE_DSB       __DSB

//Data Memory Barrier
#define CORE_DMB       __DMB


#define CORE_CURRENT_PC         __current_pc
#define CORE_CURRENT_SP         __current_sp

#define CORE_ENABLE_IRQ         __enable_irq
#define CORE_DISABLE_IRQ        __disable_irq

#define CORE_ENABLE_FIQ         __enable_fiq
#define CORE_DISABLE_FIQ        __disable_fiq


#define CORE_Get_CONTROL        __get_CONTROL
#define CORE_Set_CONTROL        __set_CONTROL
#define CORE_Get_IPSR           __get_IPSR
#define CORE_Get_APSR           __get_APSR
#define CORE_Get_xPSR           __get_xPSR
#define CORE_Get_PSP            __get_PSP
#define CORE_Set_PSP            __set_PSP
#define CORE_Get_MSP            __get_MSP
#define CORE_Set_MSP            __set_MSP
#define CORE_Get_PRIMASK        __get_PRIMASK
#define CORE_Set_PRIMASK        __set_PRIMASK
#define CORE_Get_BASEPRI        __get_BASEPRI
#define CORE_Set_BASEPRI        __set_BASEPRI
#define CORE_Set_BASEPRI_MAX    __set_BASEPRI_MAX
#define CORE_Get_FAULTMASK      __get_FAULTMASK
#define CORE_Set_FAULTMASK      __set_FAULTMASK




#endif /* _PLATFORM_CFG_H_ */


